home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 June: Reference Library / Dev.CD Jun 00 RL Disk 1.toast / pc / technical documentation / develop / develop issue 24 / develop issue 24 code / scriptable database 1.0a15.sea / Scriptable Database 1.0a15 / Scripting / TransactionSuite.h / TransactionSuite.h
Encoding:
C/C++ Source or Header  |  1996-02-20  |  2.8 KB  |  103 lines  |  [TEXT/CWIE]

  1. #pragma once
  2.  
  3. #ifndef __TRANSACTIONSUITE__
  4. #define __TRANSACTIONSUITE__
  5.  
  6. class TAEvent;
  7. class TAETransaction;
  8. class TTransaction;
  9. class TEventHandlerTable;
  10.  
  11. #include "ListTemplate.h"
  12.  
  13. #define kTransactionNotRequired false
  14.  
  15. enum AETransactionType
  16. {
  17.     kNoSuchTransaction = 0,
  18.     kSingleEventTransaction,
  19.     kMultiEventTransaction
  20. };
  21.  
  22. class TTransactionRecord
  23. {
  24. public:
  25.     TTransactionRecord() :
  26.         fTransaction(nil),
  27.         fTransactionID(0),
  28.         fTransactionType(kNoSuchTransaction) {}
  29.     TTransactionRecord(TTransaction* t, long transactionID, AETransactionType transactionType) :
  30.         fTransaction(t),
  31.         fTransactionID(transactionID),
  32.         fTransactionType(transactionType)  {}
  33.     TTransactionRecord(const TTransactionRecord* transactionRecord) :
  34.         fTransaction(transactionRecord->Transaction()),
  35.         fTransactionID(transactionRecord->TransactionID()),
  36.         fTransactionType(transactionRecord->TransactionType())   {}
  37.     
  38.     TTransaction*        Transaction() const        { return fTransaction; }
  39.     long                TransactionID() const    { return fTransactionID; }
  40.     AETransactionType    TransactionType() const    { return fTransactionType; }
  41.     
  42. private:
  43.     long                fTransactionID;
  44.     TTransaction*        fTransaction;
  45.     AETransactionType    fTransactionType;
  46. };
  47.  
  48. class TTransactionList
  49. {
  50. public:
  51.     void                            AddTransaction(TTransaction* t, long transactionID, AETransactionType transactionType);
  52.     TTransaction*                    FindTransaction(long transactionID) const;
  53.     void                            RemoveTransaction(TTransaction* transaction);
  54.     AETransactionType                TransactionType(TTransaction* t) const;
  55.     
  56. private:
  57.     AListOf<TTransactionRecord>        fTransactionList;
  58. };
  59.  
  60.  
  61. class TTransactionSuite
  62. {
  63. public:
  64.     static void InstallAEHandlers(TEventHandlerTable&);
  65.     
  66.     // event handlers
  67.  
  68. protected:
  69.  
  70.     static pascal OSErr        BeginTransaction(TAEvent& ae, TAEvent& reply, long hRefcon);
  71.     static pascal OSErr        EndTransaction(TAEvent& ae, TAEvent& reply, long hRefcon);
  72.     static pascal OSErr        TerminateTransaction(TAEvent& ae, TAEvent& reply, long hRefcon);
  73.  
  74.     // transaction control
  75.  
  76. public:
  77.  
  78.     static void                BeginEventTransaction(TAETransaction& t, Boolean transactionAlwaysNeeded = true);
  79.     static void                EndEventTransaction(TAETransaction& t) { EndEventTransaction(t, false); }
  80.     static void                TerminateEventTransaction(TAETransaction& t) { TerminateEventTransaction(t, false); }
  81.  
  82.     static TTransaction*    GetTransactionFromEvent(const TAETransaction& t);
  83.  
  84.     // private methods
  85.  
  86. private:
  87.  
  88.     static SInt32            GenerateNewTransactionID();
  89.     
  90.     static void                BeginEventTransaction(TAETransaction& t, AETransactionType transactionType, SInt32 transactionID, Boolean transactionAlwaysNeeded = true);
  91.     static void                EndEventTransaction(TAETransaction& t, Boolean alwaysDeleteTransaction);
  92.     static void                TerminateEventTransaction(TAETransaction& t, Boolean alwaysDeleteTransaction);
  93.     
  94.     // private members
  95.  
  96. private:
  97.  
  98.     static TTransactionList    gTransactionList;    
  99.     static long                gTransactionID;
  100. };
  101.  
  102. #endif
  103.